相對於docker build與dockerfile聚焦在image如何產生,而docker-compose指令著重在複數容器啟動時的設定與互動(資料空間、docker network),內容主要著重在docker-compose.yml設定檔的編寫,docker-compose up指令可以依據docker-compose.yml檔案,進行一連串的設定與啟動
https://zh.wikipedia.org/wiki/YAML
寫幾點我在練習時候有稍微卡關的地方
來看下面我用來啟動eureka, hystrix, rabbitmq的例子
version: '3'
services:
eureka:
image: springcloud/eureka:latest
container_name: eureka-server
depends_on:
- "rabbitmq"
ports:
- "8761:8761"
hystrix:
image: kennedyoliveira/hystrix-dashboard:latest
container_name: hystrix-dashboard
depends_on:
- "rabbitmq"
ports:
- "7979:7979"
rabbitmq:
image: rabbitmq:3-management
container_name: rabbitmq
ports:
- "5672:5672"
- "15672:15672"
volumes:
networks:
先從大分區來看
version, services, volumes, networks
version: 這個docker-compose對應到的docker版本,不同版本指令略有區別
services: 就是容器的各項設定
volumes: 共用儲存空間的設定, 就是data volume
networks: 容器間內部網路的設定
由於沒有database又是透過主機的port連線,所以沒有內容
一行docker-compose up就讓我在利用steeltoeoss開發中需要的環境啟動完成
注意最下面的productservice,apigateway
version: '3'
services:
eureka:
image: springcloud/eureka:latest
container_name: eureka-server
depends_on:
- "rabbitmq"
ports:
- "8761:8761"
hystrix:
image: kennedyoliveira/hystrix-dashboard:latest
container_name: hystrix-dashboard
depends_on:
- "rabbitmq"
ports:
- "7979:7979"
rabbitmq:
image: rabbitmq:3-management
container_name: rabbitmq
ports:
- "5672:5672"
- "15672:15672"
productservice:
image: productservice:latest
container_name: productservice
build:
context: ./productservice
depends_on:
- "eureka"
apigateway:
image: apigateway:latest
container_name: apigateway
environment:
- BUILD=LOCAL
build:
context: ./apigateway
depends_on:
- "rabbitmq"
- "hystrix"
利用build指令,可以切換到不同目錄下然後以該目錄底下的dockerfile進行編譯後發行image, 再依據最新的image啟動容器。當然docker-compose的步驟可以靠寫批次檔完成,但不會像使用docker-compose搭配yml這麼方便管理,利用docker-compose在localhost一次啟動所有開發所需的服務,這個還蠻實用的,當你的服務越來越多,可以幫你省下不少手動啟動跟環境設置的時間。
docker-compose build
docker-compose start [容器名稱,沒有名稱則是啟動所有yml設定的容器]
docker-compose stop [容器名稱,沒有名稱則是停止所有yml設定的容器]
docker-compose rm -v: 移除所有yml設定且停止的容器,參數-v是移除data volumne
docker-compose ps: 列出在yml裡面被設定的容器
docker-compose build: 執行yml裡面有設定過的build
docker還有好多得學,三天真的只是划水....